package com.FundamentalDemos.ObjectOriented;

public class JavaBean实体类 {
    public static void main(String[] args) {
        Student2 stu = new Student2();//生成"学生实体类"对象,当中只有数据存取操作
        stu.setName("张三");
        stu.setScore(99.99);
        System.out.println(stu.getName() + " 得了 " + stu.getScore() + " 分!");

        System.out.println("-----------------------");
        //通过使用实体类+操作类,实现数据存取与数据操作处理相分离
        Student2Operator so = new Student2Operator(stu);//用"学生实体类"对象给"学生实体操作类"初始化,用"学生实体操作类"对象来对学生实体数据进行操作处理
        so.isPass();
        stu.setScore(59);//使用实体类对象存取修改数据,因为操作类中的实体类引用变量已经指向实体类对象了,因此修改实体类数据后,再次调用操作类中的函数时,使用的已经是修改过后的实体类对象了
        so.isPass();

    }
}

class Student2 {
    //1.实体类必须私有化成员变量,每个成员变量有Getter,Setter
    private String name;
    private double score;

    //自动生成Getter,Setter  快捷键 Alt+insert 或者 右键...

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    //2.必须为实体类提供一个公开的无参数构造函数

    //有参构造函数
    public Student2(String name, double score) {
        this.name = name;
        this.score = score;
    }

    //无参构造函数必须有
    public Student2() {

    }

    //满足以上两点,并且也不再在此类中设计其他成员函数,不再实现其他功能,仅仅作为一个存取数据的类,此类就称为一个JavaBean"实体类"

    //实体类只负责数据存取,而对数据的操作处理交个其他类来完成,以实现数据和数据业务处理相分离
}


class Student2Operator {//专门对"实体类"Student2进行数据处理的类
    private Student2 stu;

    /**
     * 通过Student2操作类的有参构造函数,来获取Student2实体类对象
     */
    public Student2Operator(Student2 stu) {
        this.stu = stu;
    }

    public void isPass(/*无需参数,因为实体类对象已经在操作类初始化时给出了*/) {
        System.out.println(this.stu.getScore() >= 60 ? "你及格了!" : "很遗憾你没及格!");
    }
}